package structure.list;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.Random;

/**
 * 有序集合的fail-fast演示
 * @author fidel
 */
public class ListFailFastDemo {
    public static void main(String[] args) {
        Random random = new Random();
        Byte[] bytes = new Byte[16];
        int index = 0;
        while (index < bytes.length) {
            bytes[index] = (byte) random.nextInt(128);
            index++;
        }
        // 在Arrays.asList方法参数中，基本数据类型的数组被视为一个单独的Object对象
        // 要将数组转换为一个有序集合，数组必须是引用数据类型的数组
        List<Byte> byteList = new ArrayList<>(Arrays.asList(bytes));
        // 随机获取指定索引位置的元素
        index = random.nextInt(8);
        Byte element = byteList.get(index);
        System.out.println("从有序集合中随机获取的元素为" + element);
        /*
         * 在遍历有序集合的过程中，不能对有序集合执行写入操作
         * 若在迭代过程中要对有序集合执行写入操作，务必使用迭代器
         * 在多线程场景下可使用CopyOnWriteArrayList替代ArrayList，该容器内部会对迭代器执行加锁操作
         */
        Iterator<Byte> iterator = byteList.listIterator();
        while (iterator.hasNext()) {
            if (Objects.equals(iterator.next(), element)) {
                System.out.println("从迭代器中移除元素" + element);
                // 从迭代器中移除当前元素
                iterator.remove();
            }
        }
        System.out.println("从有序集合中查找元素" + element + "的结果为" + byteList.contains(element));
    }
}
